---
title: 印刷
icon: '#pro/Printer'
---

<MetaData
  lang="ja-JP"
  isPro
  meta={{
    preset: [{
      client: '@univerjs/preset-sheets-advanced',
      locale: '@univerjs/preset-sheets-advanced/locales/en-US',
      style: '@univerjs/preset-sheets-advanced/lib/index.css',
    }],
    plugins: [{
      client: '@univerjs-pro/sheets-print',
      facade: '@univerjs-pro/sheets-print/facade',
      locale: '@univerjs-pro/sheets-print/locale/en-US',
      style: '@univerjs-pro/sheets-print/lib/index.css',
    }],
    server: 'No',
  }}
/>

印刷機能により、スプレッドシートの内容を紙のドキュメントとして印刷したり、オフライン閲覧や共有のために PDF 形式へエクスポートしたりできます。

<PlaygroundFrame lang="ja-JP" slug="sheets/print" clickToShow />

## プリセットモード

印刷機能は `@univerjs/preset-sheets-advanced` のプリセットに含まれています。

### インストール

<Callout>
  `@univerjs/preset-sheets-advanced` の `UniverSheetsAdvancedPreset` は、実行時に `UniverSheetsDrawingPreset` に依存します。先に `@univerjs/preset-sheets-drawing` をインストールしてください。
</Callout>

```package-install
npm install @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advanced
```

### 使い方

```typescript
import { UniverSheetsAdvancedPreset } from '@univerjs/preset-sheets-advanced' // [!code ++]
import UniverPresetSheetsAdvancedEnUS from '@univerjs/preset-sheets-advanced/locales/en-US' // [!code ++]
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreEnUS from '@univerjs/preset-sheets-core/locales/en-US'
import { UniverSheetsDrawingPreset } from '@univerjs/preset-sheets-drawing' // [!code ++]
import UniverPresetSheetsDrawingEnUS from '@univerjs/preset-sheets-drawing/locales/en-US' // [!code ++]
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'

import '@univerjs/preset-sheets-core/lib/index.css'
import '@univerjs/preset-sheets-drawing/lib/index.css' // [!code ++]
import '@univerjs/preset-sheets-advanced/lib/index.css' // [!code ++]

const { univerAPI } = createUniver({
  locale: LocaleType.En_US,
  locales: {
    [LocaleType.En_US]: mergeLocales(
      UniverPresetSheetsCoreEnUS,
      UniverPresetSheetsDrawingEnUS, // [!code ++]
      UniverPresetSheetsAdvancedEnUS, // [!code ++]
    ),
  },
  presets: [
    UniverSheetsCorePreset(),
    UniverSheetsDrawingPreset(), // [!code ++]
    UniverSheetsAdvancedPreset(), // [!code ++]
  ],
})
```

Univer の商用ライセンスをお持ちの場合は、設定方法について [クライアントでのライセンス](/guides/pro/license#in-preset-mode) を参照してください。

### プリセットと設定

```typescript
interface IUniverSheetsAdvancedPresetConfig {
  print?: Partial<IUniverSheetsPrintConfig>
}

interface IUniverSheetsPrintConfig {
  /**
   * 印刷時にウォーターマークを強制的に表示するかどうか
   * @default false
   */
  enforceWatermark?: boolean
}
```

## プラグインモード

### インストール

```package-install
npm install @univerjs-pro/sheets-print
```

### 使い方

```typescript
import { UniverSheetsPrintPlugin } from '@univerjs-pro/sheets-print' // [!code ++]
import SheetsPrintPluginEnUS from '@univerjs-pro/sheets-print/locale/en-US' // [!code ++]
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'

import '@univerjs-pro/sheets-print/lib/index.css' // [!code ++]

const univer = new Univer({
  locale: LocaleType.En_US,
  locales: {
    [LocaleType.En_US]: mergeLocales(
      SheetsPrintPluginEnUS, // [!code ++]
    ),
  },
})

univer.registerPlugin(UniverSheetsPrintPlugin) // [!code ++]
```

Univer の商用ライセンスをお持ちの場合は、設定方法について [クライアントでのライセンス](/guides/pro/license#in-plugin-mode) を参照してください。

### Plugins and Configuration

```typescript
interface IUniverSheetsPrintConfig {
  /**
   * 印刷時にウォーターマークを強制的に表示するかどうか
   * @default false
   */
  enforceWatermark?: boolean
}
```

## Facade API

### 印刷設定ダイアログを開く

`FWorkbook.openPrintDialog` を使用すると、印刷設定ダイアログを開けます。

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()

fWorkbook.openPrintDialog()
```

### 印刷設定ダイアログを閉じる

`FWorkbook.closePrintDialog` メソッドを使用すると、印刷設定ダイアログを閉じられます。

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
fWorkbook.openPrintDialog()

// 3 秒後に印刷設定ダイアログを閉じる
setTimeout(() => {
  fWorkbook.closePrintDialog()
}, 3000)
```

### 印刷レイアウト設定の更新

[`FWorkbook.updatePrintConfig(config: ISheetPrintLayoutConfig)`](https://reference.univer.ai/en-US/classes/FWorkbook#updateprintconfig) メソッドを使用して、印刷レイアウト設定を更新します。

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
const subUnitId = fWorksheet.getSheetId()

// 印刷レイアウト設定を更新
fWorkbook.updatePrintConfig({
  area: univerAPI.Enum.PrintArea.CurrentSheet, // 現在のシートを印刷
  subUnitIds: [subUnitId],
  paperSize: univerAPI.Enum.PrintPaperSize.A4, // A4 用紙サイズ
  scale: univerAPI.Enum.PrintScale.FitPage, // コンテンツをページに合わせる
  freeze: [univerAPI.Enum.PrintFreeze.Row], // 行ヘッダーを固定
  margin: univerAPI.Enum.PrintPaperMargin.Normal, // 標準の余白
  // ... その他の設定
})

// 更新した設定で印刷を開始
fWorkbook.print()
```

<details>
  <summary>`ISheetPrintLayoutConfig` の完全な定義はこちら:</summary>
  ```typescript
  /**
   * シートの印刷レイアウト設定の構成インターフェース
   */
  export interface ISheetPrintLayoutConfig {
    /**
     * 印刷するシート領域を指定します（例: 現在のシート、選択範囲）
     */
    area: PrintArea
    /**
     * 印刷するサブユニット ID のリスト。ユニット内の特定範囲を含めることもできます
     */
    subUnitIds: (string | { id: string, range: IRange })[]
    /**
     * 用紙サイズの設定（例: A4、Letter）
     */
    paperSize: PrintPaperSize
    /**
     * ページの向き（縦: Portrait / 横: Landscape）
     */
    direction: PrintDirection
    /**
     * コンテンツをページに合わせるためのスケールの種類
     */
    scale: PrintScale
    /**
     * スケール種類が Custom の場合のカスタム倍率（%）
     */
    customScale: number
    /**
     * 行・列の固定設定の配列
     */
    freeze: PrintFreeze[]
    /**
     * 印刷ページの余白プリセット
     */
    margin: PrintPaperMargin
    /**
     * カスタム用紙サイズ使用時のページ寸法
     */
    pageSizeCustom?: { w: number, h: number }
    /**
     * 1 ページあたりの最大行数
     */
    maxRowsEachPage: number
    /**
     * 1 ページあたりの最大列数
     */
    maxColumnsEachPage: number
  }

  /**
   * 印刷対象のスプレッドシート領域を定義します
   */
  export enum PrintArea {
    /** 現在のアクティブシートのみを印刷 */
    CurrentSheet = 'CurrentSheet',
    /** ブック全体を印刷 */
    workbook = 'Workbook',
    /** 現在選択している範囲のみを印刷 */
    CurrentSelection = 'CurrentSelection',
    /** シートをまたいで選択されているすべての範囲を印刷 */
    AllSelection = 'AllSelection',
  }

  /**
   * 印刷に使用する用紙サイズを定義します
   */
  export enum PrintPaperSize {
    /** Letter 用紙サイズを使用 */
    Letter = 'Letter',
    /** Tabloid 用紙サイズを使用 */
    Tabloid = 'Tabloid',
    /** Legal 用紙サイズを使用 */
    Legal = 'Legal',
    /** Statement 用紙サイズを使用 */
    Statement = 'Statement',
    /** Executive 用紙サイズを使用 */
    Executive = 'Executive',
    /** Folio 用紙サイズを使用 */
    Folio = 'Folio',
    /** A3 用紙サイズを使用 */
    A3 = 'A3',
    /** A4 用紙サイズを使用 */
    A4 = 'A4',
    /** A5 用紙サイズを使用 */
    A5 = 'A5',
    /** B4 用紙サイズを使用 */
    B4 = 'B4',
    /** B5 用紙サイズを使用 */
    B5 = 'B5',
  }

  /**
   * 印刷ページの向きを定義します
   */
  export enum PrintDirection {
    /** 縦向き（Portrait） */
    Portrait = 'Portrait',
    /** 横向き（Landscape） */
    Landscape = 'Landscape',
  }

  /**
   * 印刷時のスケール種別を定義します
   */
  export enum PrintScale {
    /** 通常のスケール */
    Origin = 'Origin',
    /** 幅に合わせる */
    FitWidth = 'FitWidth',
    /** 高さに合わせる */
    FitHeight = 'FitHeight',
    /** ページに合わせる */
    FitPage = 'FitPage',
    /** カスタムスケール */
    Custom = 'Custom',
  }

  /**
   * 印刷時に固定しておく要素を定義します
   */
  export enum PrintFreeze {
    /** 印刷時に行ヘッダーを固定 */
    Row = 'Row',
    /** 印刷時に列ヘッダーを固定 */
    Column = 'Column',
  }

  /**
   * 印刷ページの余白プリセットを定義します
   */
  export enum PrintPaperMargin {
    /** 標準の余白を使用 */
    Normal = 'Normal',
    /** 狭い余白を使用 */
    Narrow = 'Narrow',
    /** 広い余白を使用 */
    Wide = 'Wide',
    /** 余白を設定しない */
    None = 'None',
  }
  ```
</details>

### 印刷レンダー設定の更新

[`FWorkbook.updatePrintRenderConfig(config: ISheetPrintRenderConfig)`](https://reference.univer.ai/en-US/classes/FWorkbook#updateprintrenderconfig) メソッドを使用して、印刷レンダー設定を更新します。

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()

// 既定では印刷レイアウト設定を更新
fWorkbook.updatePrintConfig({})

// 印刷レンダー設定を更新
fWorkbook.updatePrintRenderConfig({
  gridlines: true, // 罫線を表示
  hAlign: univerAPI.Enum.PrintAlign.Middle, // 水平方向中央揃え
  vAlign: univerAPI.Enum.PrintAlign.Middle, // 垂直方向中央揃え
  headerFooter: [ // 含めるヘッダー/フッター要素の配列。ここではページ番号とワークシート名
    univerAPI.Enum.PrintHeaderFooter.PageSize,
    univerAPI.Enum.PrintHeaderFooter.WorksheetTitle,
  ],
  // ... その他の設定
})

// 印刷を開始
fWorkbook.print()
```

<details>
  <summary>`ISheetPrintRenderConfig` の完全な定義はこちら:</summary>
  ```typescript
  /**
   * シートの印刷レンダリング オプションの構成インターフェース
   */
  export interface ISheetPrintRenderConfig {
    /**
     * 印刷出力で罫線を表示するかどうか
     */
    gridlines: boolean
    /**
     * コンテンツの水平方向の配置設定
     */
    hAlign: PrintAlign
    /**
     * コンテンツの垂直方向の配置設定
     */
    vAlign: PrintAlign
    /**
     * 含めるヘッダー/フッター要素の配列
     */
    headerFooter: PrintHeaderFooter[]
    /**
     * ヘッダー/フッター コンテンツの詳細設定
     */
    headerFooterSetting: IPrintHeaderFooter
    /**
     * プリセットの代わりにカスタム ヘッダー/フッターを使用するかどうか
     */
    isCustomHeaderFooter?: boolean

    watermark?: Nullable<IWatermarkConfigWithType>
  }

  /**
   * 印刷コンテンツで利用可能な整列オプションを定義します
   */
  export enum PrintAlign {
    /** 水平方向は左寄せ、垂直方向は上寄せ */
    Start = 'Start',
    /** 水平方向は右寄せ、垂直方向は下寄せ */
    End = 'End',
    /** 水平方向は中央揃え、垂直方向は中央揃え */
    Middle = 'Middle',
  }

  /**
   * Defines the available placeholders for header and footer content
   */
  export enum PrintHeaderFooter {
    /** Insert current page numbers information */
    PageSize = 'PageSize',
    /** Insert workbook name */
    WorkbookTitle = 'WorkbookTitle',
    /** Insert worksheet name */
    WorksheetTitle = 'WorksheetTitle',
    /** Insert current date */
    Date = 'Date',
    /** Insert current time */
    Time = 'Time',
  }

  /**
   * ヘッダー/フッター コンテンツの配置用構成インターフェース
   */
  export interface IPrintHeaderFooter {
    /** 上部左セクションに表示する内容 */
    topLeft: string
    /** 上部中央セクションに表示する内容 */
    topCenter: string
    /** 上部右セクションに表示する内容 */
    topRight: string
    /** 下部左セクションに表示する内容 */
    bottomLeft: string
    /** 下部中央セクションに表示する内容 */
    bottomCenter: string
    /** 下部右セクションに表示する内容 */
    bottomRight: string
  }
  ```
</details>

### 印刷

`FWorkbook.print` メソッドを使用すると、印刷ダイアログを直接トリガーできます。

```typescript
// 既定の設定を使う場合は空のオブジェクトを渡せます
workbook.updatePrintConfig({
  // ... 印刷レイアウト設定
})
workbook.updatePrintRenderConfig({
  // ... 印刷レンダー設定
})
workbook.print()
```

### スクリーンショットをクリップボードに保存

`FWorkbook.saveScreenshotToClipboard` メソッドを使用すると、印刷データの画像をクリップボードに保存できます。

[ライセンス](en-US/guides/pro/license) をお持ちの方のみ利用可能です。ライセンスがない場合は使用制限があり、保存処理は `false` を返します。

画像の保存には Clipboard API を使用しており、非セキュアなネットワーク環境や未対応のブラウザーでは失敗する場合があります。保存に成功すると `true` を返します。

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const result = await fWorkbook.saveScreenshotToClipboard()
```

### 選択範囲のスクリーンショットを取得

`FRange.getScreenshot` メソッドを使用すると、選択した印刷データのスクリーンショットを取得できます。

[ライセンス](en-US/guides/pro/license) をお持ちの方のみ利用可能です。ライセンスがない場合は使用制限があり、失敗時は `false` を返し、成功時は画像の base64 文字列を返します。

```typescript
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
const fRange = fWorksheet.getRange('A1:D10')
fRange.getScreenshot()
```

### イベント リスナー

印刷機能では、次のイベントが利用できます。

`univerAPI.Event.BeforeSheetPrintOpen` イベントは、印刷設定ダイアログが開かれる前にトリガーされます。

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeSheetPrintOpen, (params) => {
  const { workbook, worksheet } = params

  // 印刷設定ダイアログを開く操作をキャンセルする
  params.cancel = true
})

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.SheetPrintOpen` イベントは、印刷設定ダイアログが開かれた後にトリガーされます。

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetPrintOpen, (params) => {
  const { workbook, worksheet } = params
})

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.BeforeSheetPrintConfirm` イベントは、印刷の確認ダイアログが開かれる前にトリガーされます。

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeSheetPrintConfirm, (params) => {
  const { renderConfig, layoutConfig } = params

  // 印刷の確認操作をキャンセルする
  params.cancel = true
})

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.SheetPrintConfirmed` イベントは、印刷の確認ダイアログが開かれた後にトリガーされます。

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetPrintConfirmed, (params) => {
  const { renderConfig, layoutConfig } = params
})

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.BeforeSheetPrintCanceled` イベントは、印刷のキャンセル操作の前にトリガーされます。

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeSheetPrintCanceled, (params) => {
  const { renderConfig, layoutConfig } = params

  // 印刷のキャンセル操作をキャンセルする
  params.cancel = true
})

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```

`univerAPI.Event.SheetPrintCanceled` イベントは、印刷のキャンセル操作の後にトリガーされます。

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetPrintCanceled, (params) => {
  const { renderConfig, layoutConfig } = params
})

// イベント リスナーを削除するには `disposable.dispose()` を使用します。
```
